/*

输入某二叉树的前序遍历和中序遍历的结果，请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}，
则重建二叉树并返回。

* */

import java.lang.reflect.Array;
import java.util.Arrays;

public class Problem04 {
    public TreeNode reConstructBinaryTree(int[] pre, int[] in) {
        int plenght = pre.length;
        int ilenght = in.length;
        if (plenght == 0 || ilenght == 0 || plenght != ilenght) {
            return null;
        }
        int rootVal = pre[0];
        if(pre.length == 1){
            return new TreeNode(rootVal);
        }
//        TreeNode root = reConstructBinaryTree(pre, in, plenght, ilenght);
        TreeNode root = new TreeNode(rootVal);
        int rootIndex = 0;
        for(int i=0;i<ilenght;i++){
            if(rootVal == in[i]){
                rootIndex = i;
                break;
            }
        }
        root.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,rootIndex+1),Arrays.copyOfRange(in,0,rootIndex));
        root.right = reConstructBinaryTree(Arrays.copyOfRange(pre,rootIndex+1,plenght),Arrays.copyOfRange(in,rootIndex+1,ilenght));
        return root;
    }

//    private TreeNode reConstructBinaryTree(int[] pre, int[] in, int preLenght, int inLenght) {
//        TreeNode treeNode = new TreeNode(pre[0]);
//        for(int i=0;i<inLenght;i++){
//            if(in[i]==pre[0]){
//
//            }
//        }
//        treeNode.left = treeNode.right = null;
//
//        return treeNode;
//    }
}
